// Geometric Tools, Inc.
// http://www.geometrictools.com
// Copyright (c) 1998-2006.  All Rights Reserved
//
// The Wild Magic Library (WM3) source code is supplied under the terms of
// the license agreement
//     http://www.geometrictools.com/License/WildMagic3License.pdf
// and may not be copied or disclosed except in accordance with the terms
// of that agreement.

#ifndef WM3FOUNDATIONPCH_H
#define WM3FOUNDATIONPCH_H

#ifdef WM3_USE_PRECOMPILED_HEADERS

// approximation
#include "Wm3ApprCircleFit2.h"
#include "Wm3ApprCylinderFit3.h"
#include "Wm3ApprEllipseFit2.h"
#include "Wm3ApprEllipsoidFit3.h"
#include "Wm3ApprGaussPointsFit2.h"
#include "Wm3ApprGaussPointsFit3.h"
#include "Wm3ApprLineFit2.h"
#include "Wm3ApprLineFit3.h"
#include "Wm3ApprParaboloidFit3.h"
#include "Wm3ApprPlaneFit3.h"
#include "Wm3ApprPolyFit2.h"
#include "Wm3ApprPolyFit3.h"
#include "Wm3ApprPolyFit4.h"
#include "Wm3ApprQuadraticFit2.h"
#include "Wm3ApprQuadraticFit3.h"
#include "Wm3ApprSphereFit3.h"

// collision
#include "Wm3BoundingVolumeTree.h"
#include "Wm3BoxBVTree.h"
#include "Wm3CollisionGroup.h"
#include "Wm3CollisionRecord.h"
#include "Wm3SphereBVTree.h"

// containment
#include "Wm3ContBox2.h"
#include "Wm3ContBox3.h"
#include "Wm3ContCapsule3.h"
#include "Wm3ContCircle2.h"
#include "Wm3ContCylinder3.h"
#include "Wm3ContEllipse2.h"
#include "Wm3ContEllipsoid3.h"
#include "Wm3ContLozenge3.h"
#include "Wm3ContPointInPolygon2.h"
#include "Wm3ContScribeCircle2.h"
#include "Wm3ContScribeCircle3Sphere3.h"
#include "Wm3ContSeparatePoints2.h"
#include "Wm3ContSeparatePoints3.h"
#include "Wm3ContSphere3.h"
#include "Wm3ConvexHull.h"
#include "Wm3ConvexHull1.h"
#include "Wm3ConvexHull2.h"
#include "Wm3ConvexHull3.h"
#include "Wm3HullEdge2.h"
#include "Wm3HullTriangle3.h"

// controllers
#include "Wm3Controller.h"
#include "Wm3IKController.h"
#include "Wm3IKGoal.h"
#include "Wm3IKJoint.h"
#include "Wm3KeyframeController.h"
#include "Wm3MorphController.h"
#include "Wm3ParticleController.h"
#include "Wm3PointController.h"
#include "Wm3SkinController.h"

// curves
#include "Wm3BezierCurve2.h"
#include "Wm3BezierCurve3.h"
#include "Wm3BSplineBasis.h"
#include "Wm3BSplineCurve2.h"
#include "Wm3BSplineCurve3.h"
#include "Wm3BSplineFit.h"
#include "Wm3BSplineFitBasis.h"
#include "Wm3BSplineGeodesic.h"
#include "Wm3BSplineReduction.h"
#include "Wm3CubicPolynomialCurve2.h"
#include "Wm3CubicPolynomialCurve3.h"
#include "Wm3Curve2.h"
#include "Wm3Curve3.h"
#include "Wm3CurveMesh.h"
#include "Wm3CurveSegment.h"
#include "Wm3EllipsoidGeodesic.h"
#include "Wm3MultipleCurve2.h"
#include "Wm3MultipleCurve3.h"
#include "Wm3NaturalSpline2.h"
#include "Wm3NaturalSpline3.h"
#include "Wm3NURBSCurve2.h"
#include "Wm3NURBSCurve3.h"
#include "Wm3PolynomialCurve2.h"
#include "Wm3PolynomialCurve3.h"
#include "Wm3RiemannianGeodesic.h"
#include "Wm3SingleCurve2.h"
#include "Wm3SingleCurve3.h"
#include "Wm3TCBSpline2.h"
#include "Wm3TCBSpline3.h"

// detail
#include "Wm3BillboardNode.h"
#include "Wm3ClodMesh.h"
#include "Wm3CollapseRecord.h"
#include "Wm3CollapseRecordArray.h"
#include "Wm3CreateClodMesh.h"
#include "Wm3DlodNode.h"
#include "Wm3SwitchNode.h"

// distance
#include "Wm3Distance.h"
#include "Wm3DistCircle3Circle3.h"
#include "Wm3DistLine2Line2.h"
#include "Wm3DistLine2Ray2.h"
#include "Wm3DistLine2Segment2.h"
#include "Wm3DistLine3Box3.h"
#include "Wm3DistLine3Circle3.h"
#include "Wm3DistLine3Line3.h"
#include "Wm3DistLine3Ray3.h"
#include "Wm3DistLine3Rectangle3.h"
#include "Wm3DistLine3Segment3.h"
#include "Wm3DistLine3Triangle3.h"
#include "Wm3DistRay2Ray2.h"
#include "Wm3DistRay2Segment2.h"
#include "Wm3DistRay3Box3.h"
#include "Wm3DistRay3Ray3.h"
#include "Wm3DistRay3Rectangle3.h"
#include "Wm3DistRay3Segment3.h"
#include "Wm3DistRay3Triangle3.h"
#include "Wm3DistRectangle3Rectangle3.h"
#include "Wm3DistSegment2Segment2.h"
#include "Wm3DistSegment3Box3.h"
#include "Wm3DistSegment3Rectangle3.h"
#include "Wm3DistSegment3Segment3.h"
#include "Wm3DistSegment3Triangle3.h"
#include "Wm3DistTriangle3Rectangle3.h"
#include "Wm3DistTriangle3Triangle3.h"
#include "Wm3DistVector2Box2.h"
#include "Wm3DistVector2Ellipse2.h"
#include "Wm3DistVector2Line2.h"
#include "Wm3DistVector2Quadratic2.h"
#include "Wm3DistVector2Ray2.h"
#include "Wm3DistVector2Segment2.h"
#include "Wm3DistVector3Box3.h"
#include "Wm3DistVector3Circle3.h"
#include "Wm3DistVector3Ellipsoid3.h"
#include "Wm3DistVector3Frustum3.h"
#include "Wm3DistVector3Line3.h"
#include "Wm3DistVector3Plane3.h"
#include "Wm3DistVector3Quadratic3.h"
#include "Wm3DistVector3Ray3.h"
#include "Wm3DistVector3Rectangle3.h"
#include "Wm3DistVector3Segment3.h"
#include "Wm3DistVector3Tetrahedron3.h"
#include "Wm3DistVector3Triangle3.h"

// effects
#include "Wm3BumpMapEffect.h"
#include "Wm3DarkMapEffect.h"
#include "Wm3Effect.h"
#include "Wm3EnvironmentMapEffect.h"
#include "Wm3GlossMapEffect.h"
#include "Wm3LightMapEffect.h"
#include "Wm3PlanarReflectionEffect.h"
#include "Wm3PlanarShadowEffect.h"
#include "Wm3ProjectedTextureEffect.h"
#include "Wm3TextureEffect.h"
#include "Wm3VertexColorEffect.h"

// image analysis
#include "Wm3Binary2D.h"
#include "Wm3Binary3D.h"
#include "Wm3Element.h"
#include "Wm3ExtractSurfaceCubes.h"
#include "Wm3ExtractSurfaceTetra.h"
#include "Wm3FastBlur.h"
#include "Wm3ImageConvert.h"
#include "Wm3Images.h"
#include "Wm3Lattice.h"
#include "Wm3RasterDrawing.h"
#include "Wm3TImage.h"
#include "Wm3TImage2D.h"
#include "Wm3TImage3D.h"

// interpolation
#include "Wm3IntpAkima1.h"
#include "Wm3IntpAkimaNonuniform1.h"
#include "Wm3IntpAkimaUniform1.h"
#include "Wm3IntpAkimaUniform2.h"
#include "Wm3IntpAkimaUniform3.h"
#include "Wm3IntpBicubic2.h"
#include "Wm3IntpBilinear2.h"
#include "Wm3IntpBSplineUniform.h"
#include "Wm3IntpBSplineUniform1.h"
#include "Wm3IntpBSplineUniform2.h"
#include "Wm3IntpBSplineUniform3.h"
#include "Wm3IntpBSplineUniform4.h"
#include "Wm3IntpBSplineUniformN.h"
#include "Wm3IntpLinearNonuniform2.h"
#include "Wm3IntpLinearNonuniform3.h"
#include "Wm3IntpQdrNonuniform2.h"
#include "Wm3IntpSphere2.h"
#include "Wm3IntpThinPlateSpline2.h"
#include "Wm3IntpThinPlateSpline3.h"
#include "Wm3IntpTricubic3.h"
#include "Wm3IntpTrilinear3.h"
#include "Wm3IntpVectorField2.h"

// intersection
#include "Wm3Intersector.h"
#include "Wm3Intersector1.h"
#include "Wm3IntrArc2Arc2.h"
#include "Wm3IntrArc2Circle2.h"
#include "Wm3IntrBox2Box2.h"
#include "Wm3IntrBox2Circle2.h"
#include "Wm3IntrBox3Box3.h"
#include "Wm3IntrBox3Frustum3.h"
#include "Wm3IntrBox3Sphere3.h"
#include "Wm3IntrCapsule3Capsule3.h"
#include "Wm3IntrCircle2Circle2.h"
#include "Wm3IntrCircle3Plane3.h"
#include "Wm3IntrEllipse2Ellipse2.h"
#include "Wm3IntrLinComp2LinComp2.h"
#include "Wm3IntrLinComp2Triangle2.h"
#include "Wm3IntrLine2Arc2.h"
#include "Wm3IntrLine2Box2.h"
#include "Wm3IntrLine2Circle2.h"
#include "Wm3IntrLine3Box3.h"
#include "Wm3IntrLine3Capsule3.h"
#include "Wm3IntrLine3Cone3.h"
#include "Wm3IntrLine3Cylinder3.h"
#include "Wm3IntrLine3Ellipsoid3.h"
#include "Wm3IntrLine3Lozenge3.h"
#include "Wm3IntrLine3Plane3.h"
#include "Wm3IntrLine3Sphere3.h"
#include "Wm3IntrLine3Torus3.h"
#include "Wm3IntrLine3Triangle3.h"
#include "Wm3IntrLozenge3Lozenge3.h"
#include "Wm3IntrPlane3Box3.h"
#include "Wm3IntrPlane3Capsule3.h"
#include "Wm3IntrPlane3Cylinder3.h"
#include "Wm3IntrPlane3Ellipsoid3.h"
#include "Wm3IntrPlane3Lozenge3.h"
#include "Wm3IntrPlane3Plane3.h"
#include "Wm3IntrPlane3Sphere3.h"
#include "Wm3IntrPlane3Triangle3.h"
#include "Wm3IntrRay2Arc2.h"
#include "Wm3IntrRay2Box2.h"
#include "Wm3IntrRay2Circle2.h"
#include "Wm3IntrRay3Box3.h"
#include "Wm3IntrRay3Capsule3.h"
#include "Wm3IntrRay3Cylinder3.h"
#include "Wm3IntrRay3Ellipsoid3.h"
#include "Wm3IntrRay3Lozenge3.h"
#include "Wm3IntrRay3Plane3.h"
#include "Wm3IntrRay3Sphere3.h"
#include "Wm3IntrRay3Triangle3.h"
#include "Wm3IntrSegment2Arc2.h"
#include "Wm3IntrSegment2Box2.h"
#include "Wm3IntrSegment2Circle2.h"
#include "Wm3IntrSegment3Box3.h"
#include "Wm3IntrSegment3Capsule3.h"
#include "Wm3IntrSegment3Cylinder3.h"
#include "Wm3IntrSegment3Ellipsoid3.h"
#include "Wm3IntrSegment3Lozenge3.h"
#include "Wm3IntrSegment3Plane3.h"
#include "Wm3IntrSegment3Sphere3.h"
#include "Wm3IntrSegment3Triangle3.h"
#include "Wm3IntrSphere3Cone3.h"
#include "Wm3IntrSphere3Frustum3.h"
#include "Wm3IntrSphere3Sphere3.h"
#include "Wm3IntrTetrahedron3Tetrahedron3.h"
#include "Wm3IntrTriangle2Triangle2.h"
#include "Wm3IntrTriangle3Cone3.h"
#include "Wm3IntrTriangle3Triangle3.h"

// math
#include "Wm3Arc2.h"
#include "Wm3AxisAlignedBox2.h"
#include "Wm3AxisAlignedBox3.h"
#include "Wm3BandedMatrix.h"
#include "Wm3Box2.h"
#include "Wm3Box3.h"
#include "Wm3Capsule3.h"
#include "Wm3Circle2.h"
#include "Wm3Circle3.h"
#include "Wm3ColorRGB.h"
#include "Wm3ColorRGBA.h"
#include "Wm3Cone3.h"
#include "Wm3ConvexPolyhedron3.h"
#include "Wm3Cylinder3.h"
#include "Wm3Ellipse2.h"
#include "Wm3Ellipsoid3.h"
#include "Wm3Frustum3.h"
#include "Wm3GMatrix.h"
#include "Wm3GVector.h"
#include "Wm3LinComp.h"
#include "Wm3LinComp2.h"
#include "Wm3LinComp3.h"
#include "Wm3Line2.h"
#include "Wm3Line3.h"
#include "Wm3Lozenge3.h"
#include "Wm3Mapper2.h"
#include "Wm3Mapper3.h"
#include "Wm3Math.h"
#include "Wm3Matrix2.h"
#include "Wm3Matrix3.h"
#include "Wm3Matrix4.h"
#include "Wm3Plane3.h"
#include "Wm3Polyhedron3.h"
#include "Wm3Polynomial1.h"
#include "Wm3Quadratic2.h"
#include "Wm3Quadratic3.h"
#include "Wm3Quaternion.h"
#include "Wm3Ray2.h"
#include "Wm3Ray3.h"
#include "Wm3Rectangle3.h"
#include "Wm3Segment2.h"
#include "Wm3Segment3.h"
#include "Wm3Sphere3.h"
#include "Wm3Tetrahedron3.h"
#include "Wm3Torus3.h"
#include "Wm3Triangle2.h"
#include "Wm3Triangle3.h"
#include "Wm3Vector2.h"
#include "Wm3Vector3.h"
#include "Wm3Vector4.h"

// meshes
#include "Wm3BasicMesh.h"
#include "Wm3ConformalMap.h"
#include "Wm3EdgeKey.h"
#include "Wm3ETManifoldMesh.h"
#include "Wm3ETNonmanifoldMesh.h"
#include "Wm3MeshCurvature.h"
#include "Wm3MeshSmoother.h"
#include "Wm3PlanarGraph.h"
#include "Wm3TriangleKey.h"
#include "Wm3VEManifoldMesh.h"
#include "Wm3VETMesh.h"

// miscellaneous
#include "Wm3GridGraph2.h"
#include "Wm3NormalCompression.h"
#include "Wm3PerspProjEllipsoid.h"
#include "Wm3QuadToQuadTransforms.h"
#include "Wm3RandomHypersphere.h"
#include "Wm3TangentsToCircles.h"

// numerics
#include "Wm3Bisect1.h"
#include "Wm3Bisect2.h"
#include "Wm3Bisect3.h"
#include "Wm3Eigen.h"
#include "Wm3Integrate1.h"
#include "Wm3LinearSystem.h"
#include "Wm3Minimize1.h"
#include "Wm3MinimizeN.h"
#include "Wm3NoniterativeEigen3x3.h"
#include "Wm3OdeEuler.h"
#include "Wm3OdeImplicitEuler.h"
#include "Wm3OdeMidpoint.h"
#include "Wm3OdeRungeKutta4.h"
#include "Wm3OdeSolver.h"
#include "Wm3PolynomialRoots.h"

// object system
#include "Wm3ImageVersion.h"
#include "Wm3Main.h"
#include "Wm3Object.h"
#include "Wm3Rtti.h"
#include "Wm3SmartPointer.h"
#include "Wm3Stream.h"
#include "Wm3StreamVersion.h"
#include "Wm3StringTree.h"

// physics
#include "Wm3BoxSurface.h"
#include "Wm3BSplineVolume.h"
#include "Wm3ExtremalQuery3.h"
#include "Wm3ExtremalQuery3BSP.h"
#include "Wm3ExtremalQuery3PRJ.h"
#include "Wm3IntersectingBoxes.h"
#include "Wm3IntersectingIntervals.h"
#include "Wm3IntersectingRectangles.h"
#include "Wm3LCPPolyDist.h"
#include "Wm3LCPSolver.h"
#include "Wm3MassSpringArbitrary.h"
#include "Wm3MassSpringCurve.h"
#include "Wm3MassSpringSurface.h"
#include "Wm3MassSpringVolume.h"
#include "Wm3ParticleSystem.h"
#include "Wm3PolyhedralMassProperties.h"
#include "Wm3RectangleSurface.h"
#include "Wm3RevolutionSurface.h"
#include "Wm3RigidBody.h"
#include "Wm3TubeSurface.h"

// rational arithmetic
#include "Wm3IVector2.h"
#include "Wm3IVector3.h"
#include "Wm3Query.h"
#include "Wm3Query2.h"
#include "Wm3Query2Filtered.h"
#include "Wm3Query2Int64.h"
#include "Wm3Query2TInteger.h"
#include "Wm3Query2TRational.h"
#include "Wm3Query3.h"
#include "Wm3Query3Filtered.h"
#include "Wm3Query3Int64.h"
#include "Wm3Query3TInteger.h"
#include "Wm3Query3TRational.h"
#include "Wm3RVector2.h"
#include "Wm3RVector3.h"
#include "Wm3TInteger.h"
#include "Wm3TIVector.h"
#include "Wm3TRational.h"
#include "Wm3TRVector.h"

// scene graph
#include "Wm3AlphaState.h"
#include "Wm3BindInfo.h"
#include "Wm3BoundingVolume.h"
#include "Wm3BoxBV.h"
#include "Wm3BufferParams.h"
#include "Wm3Camera.h"
#include "Wm3CullState.h"
#include "Wm3DitherState.h"
#include "Wm3FogState.h"
#include "Wm3Geometry.h"
#include "Wm3GlobalState.h"
#include "Wm3Image.h"
#include "Wm3Light.h"
#include "Wm3MaterialState.h"
#include "Wm3Node.h"
#include "Wm3Particles.h"
#include "Wm3PBuffer.h"
#include "Wm3PolygonOffsetState.h"
#include "Wm3Polyline.h"
#include "Wm3Polypoint.h"
#include "Wm3Renderer.h"
#include "Wm3ScreenPolygon.h"
#include "Wm3ShadeState.h"
#include "Wm3Spatial.h"
#include "Wm3SphereBV.h"
#include "Wm3StandardMesh.h"
#include "Wm3Texture.h"
#include "Wm3Transformation.h"
#include "Wm3Triangles.h"
#include "Wm3TriFan.h"
#include "Wm3TriMesh.h"
#include "Wm3TriStrip.h"
#include "Wm3WireframeState.h"
#include "Wm3ZBufferState.h"

// shaders
#include "Wm3PixelShader.h"
#include "Wm3Shader.h"
#include "Wm3ShaderConstant.h"
#include "Wm3ShaderEffect.h"
#include "Wm3VertexShader.h"

// shared arrays
#include "Wm3CachedColorRGBAArray.h"
#include "Wm3CachedColorRGBArray.h"
#include "Wm3CachedIntArray.h"
#include "Wm3CachedVector2fArray.h"
#include "Wm3CachedVector3fArray.h"
#include "Wm3ColorRGBAArray.h"
#include "Wm3ColorRGBArray.h"
#include "Wm3DoubleArray.h"
#include "Wm3FloatArray.h"
#include "Wm3IntArray.h"
#include "Wm3Matrix2Array.h"
#include "Wm3Matrix3Array.h"
#include "Wm3Matrix4Array.h"
#include "Wm3Plane3Array.h"
#include "Wm3QuaternionArray.h"
#include "Wm3TCachedArray.h"
#include "Wm3TSharedArray.h"
#include "Wm3Vector2Array.h"
#include "Wm3Vector3Array.h"
#include "Wm3Vector4Array.h"

// sorting
#include "Wm3BspNode.h"
#include "Wm3ConvexRegion.h"
#include "Wm3ConvexRegionManager.h"
#include "Wm3Portal.h"

// surfaces
#include "Wm3BSplineRectangle.h"
#include "Wm3ImplicitSurface.h"
#include "Wm3NURBSRectangle.h"
#include "Wm3ParametricSurface.h"
#include "Wm3QuadricSurface.h"
#include "Wm3Surface.h"
#include "Wm3SurfaceMesh.h"
#include "Wm3SurfacePatch.h"

// system
#include "Wm3String.h"
#include "Wm3System.h"
#include "Wm3TArray.h"
#include "Wm3THashSet.h"
#include "Wm3THashTable.h"
#include "Wm3TList.h"
#include "Wm3TSet.h"
#include "Wm3TStack.h"

// terrain
#include "Wm3ClodTerrain.h"
#include "Wm3ClodTerrainBlock.h"
#include "Wm3ClodTerrainPage.h"
#include "Wm3ClodTerrainVertex.h"
#include "Wm3Terrain.h"
#include "Wm3TerrainPage.h"

// delaunay
#include "Wm3Delaunay.h"
#include "Wm3Delaunay1.h"
#include "Wm3Delaunay2.h"
#include "Wm3Delaunay3.h"
#include "Wm3DelPolygonEdge.h"
#include "Wm3DelPolyhedronFace.h"
#include "Wm3DelTetrahedron.h"
#include "Wm3DelTriangle.h"
#include "Wm3TriangulateEC.h"

#endif

#endif

